package com.test.test.utils.aspect;

import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

/*@Aspect
@Component*/
public class ExecutionAspect {
	// execution() 有5个参数
	// 下面是拦截 修饰符为 public 返回参数任意 com.test.test.service.impl包下面以Impl结尾的 任意方法 任意参数
	// 返回参数任意 * 返回参数 类型
	// throws java.lang.Exception 拦截指定异常的

	// 匹配任何公共方法
	// @Pointcut("execution(public * com.imooc.service.*.*(..))")

	// 匹配com.imooc包及子包下Service类中无参方法
	// @Pointcut("execution(* com.imooc..*Service.*())")

	// 匹配com.imooc包及子包下Service类中的任何只有一个参数的方法
	// @Pointcut("execution(* com.imooc..*Service.*(*))")

	// 匹配com.imooc包及子包下任何类的任何方法
	// @Pointcut("execution(* com.imooc..*.*(..))")

	// 匹配com.imooc包及子包下返回值为String的任何方法
	// @Pointcut("execution(String com.imooc..*.*(..))")

	// 匹配异常
	// execution(public * com.imooc.service.*.*(..) throws
	// java.lang.IllegalAccessException)

	@Pointcut("execution(public * com.test.test.service.impl.*Impl.*(..) throws java.lang.Exception)")
	public void executionDemo() {

	}

	@Before("executionDemo()")
	public void before() {
		System.out.println("");
		System.out.println("before executionDemo");
	}
}
